﻿//-------------------------------------------------------------------
//	Copyright (c) 2010-2014  Zhirnov Andrey
//	This file is part of the "UX Standard Lib" project.
//	See copyright notice in "UX_STL_Ext.h".
//-------------------------------------------------------------------

#include "GLBatchRender.h"

namespace UX_STL
{
namespace GLShell
{
	
/*
=================================================
	добавляет вершину
=================================================
*/
	void GLBatchRender::Vertex3d(const TVertex3D &sVertex)
	{
		AddVertices( &sVertex, sizeof(sVertex) );
	}

/*
=================================================
	добавляет массив вершин
=================================================
*/
	void GLBatchRender::Polygons3d(const TVertex3D *pPolygons, uint uCount)
	{
		for (uint i = 0; i < uCount; ++i) {
			Vertex3d( pPolygons[i] );
		}
	}
		
/*
=================================================
	добавляет точку
=================================================
*/
	void GLBatchRender::Point3d(const TVertex3D &sPoint)
	{
		Vertex3d( sPoint );
	}

	void GLBatchRender::Point3d(void *pParam, PDrawBatchProc_t pDraw, const TVertex3D &sPoint)
	{
		NewBatchC( pParam, pDraw, gl_primitive::POINT, _uDefault3DBatch );
		Point3d( sPoint );
	}
		
/*
=================================================
	добавляет линию
=================================================
*/
	void GLBatchRender::Line3d(const TLine3D &sLine)
	{
		Vertex3d( sLine.sPoint0 );
		Vertex3d( sLine.sPoint1 );
	}

	void GLBatchRender::Line3d(void *pParam, PDrawBatchProc_t pDraw, const TLine3D &sLine)
	{
		NewBatchC( pParam, pDraw, gl_primitive::LINE, _uDefault3DBatch );
		Line3d( sLine );
	}
	
/*
=================================================
	добавляет линии
=================================================
*/
	void GLBatchRender::Lines3d(const TLine3D *pLines, uint uCount)
	{
		Polygons3d( & pLines[0].sPoint0, uCount << 1 );
	}

	void GLBatchRender::Lines3d(void *pParam, PDrawBatchProc_t pDraw, const TLine3D *pLines, uint uCount)
	{
		NewBatchC( pParam, pDraw, gl_primitive::LINE, _uDefault3DBatch );
		Lines3d( pLines, uCount );
	}
		
/*
=================================================
	добавляет линии
=================================================
*/
	void GLBatchRender::Lines3dS(const TVertex3D *pPoints, uint uCount)
	{
		Polygons3d( pPoints, uCount );
	}

	void GLBatchRender::Lines3dS(void *pParam, PDrawBatchProc_t pDraw, const TVertex3D *pPoints, uint uCount)
	{
		NewBatch( pParam, pDraw, gl_primitive::LINE_STRIP, _uDefault3DBatch );
		Lines3dS( pPoints, uCount );
	}
	
/*
=================================================
	добавляет треугольник
=================================================
*/
	void GLBatchRender::Triangle3d(const TTriangle3D &sTriangle)
	{
		Polygons3d( & sTriangle.sPoint0, 3 );
	}

	void GLBatchRender::Triangle3d(void *pParam, PDrawBatchProc_t pDraw, const TTriangle3D &sTriangle)
	{
		NewBatchC( pParam, pDraw, gl_primitive::TRIANGLE, _uDefault3DBatch );
		Triangle3d( sTriangle );
	}
	
/*
=================================================
	добавляет четырехугольник
=================================================
*/
	void GLBatchRender::Rect3dS(const TRect3D &sRect)
	{
		Polygons3d( & sRect.sPoint0, 4 );
	}

	void GLBatchRender::Rect3dS(void *pParam, PDrawBatchProc_t pDraw, const TRect3D &sRect)
	{
		NewBatch( pParam, pDraw, gl_primitive::TRIANGLE_STRIP, _uDefault3DBatch );
		Rect3dS( sRect );
	}

//-------------------------------------------------------------------

}	// GLShell
}	// UX_STL
